/**
 * 读取文件夹下列表
 * @param dir string|buffer|url 目录路径
 * @param opt json|null 选项
 * 		enc: string 返回格式  utf8(默认)|buffer|base64
 * 		dts: boolean 返回是否dirent  >=10.10 默认:true
 * 		ign: boolean 是否忽略不存在  默认false:抛出
 * 		syn: boolean 是否同步操作  默认false:异步
 * @return Promise|array|null  !opt.syn->Promise
 * 		array: 根据enc,dts -> Dirent|string|buffer
 */
$.fsList = function(dir, opt=null){
	const DEF = {enc:'utf8', dts:true, syn:false};
	const $FS=require('node:fs'), ERR=(e,o)=>{
		let x = e.code==='ENOENT' || e.code==='ENXIO';
		if(x&&o.ign) return null; $.err('$.fsList',e);
	};
	$.fsList = function(dir, opt=null){
		opt=$.mix({},DEF,opt); const {enc,dts}=opt;
		const opx={encoding:enc,withFileTypes:dts};
		if(opt.syn){
			try{ return $FS.readdirSync(dir,opx); }
			catch(err){ return ERR(err,opt); }
		}
		return $.fsAsync('readdir',dir,opx)
			.catch(err=>ERR(err,opt));
	};
	return $.fsList(dir, opt);
};
